package javagame;

import gameobjects.*;
import gameobjects.Objekat.oblik;
import gameobjects.Protivnik.tip_protivnika;

import java.util.ArrayList;
import java.util.Iterator;

import javagame.Play.game_mode;

import org.newdawn.slick.*;
import org.newdawn.slick.state.*;

import gamesound.Zvuk;
import gamethreads.*;

public class LevelBoss1 extends Level {
	
	private static int brProtivnika = 1;
	private static int brPowerUp = 0;
	
	private Image world;
	private Image rupa;
	private Animation eksplozija;
	private Animation prolaz;
	private int[] duration;
	private int[] duration2;
	private int[] duration3;
	
	public LevelBoss1 (int state) {
		
	}

	public int getID() {
		return 9;
	}

	public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
		Nivo.addLevel(this);
		pocniNivo = true;
		tenkIgrac = Igrac.dohvIgraca();
		tenkIgrac2 = Igrac2.dohvIgraca();
		protivnik = new Protivnik[brProtivnika];
		protivnikT = new ProtivnikT[brProtivnika];
		budzenje = new PowerUp[brPowerUp];
		kolizija = new Kolizija();
		zvuk = Zvuk.dohvZvuk();
		quit = false;
		shot = false;
		shot2 = false;
		otvoriProlaz = false;
		duration = new int[2];
		duration2 = new int[2];
		duration3 = new int[2];
		duration[0] = duration[1] = 200;
		duration2[0] = duration2[1] = 2000;
		duration3[0]= duration3[1] = 500;
		world = new Image("res/level1_4_anim.png");
		rupa = new Image("res/rupa4.png");
		Image [] eksp = {new Image("res/bum.png"), new Image("res/bum2.png")};
		Image [] prol = {new Image("res/zid_3.png"), new Image("res/cigla_anim2.png")};
		eksplozija = new Animation(eksp, duration2, true);
		prolaz = new Animation(prol, duration3, true);
		dodajObjekte();	
		initProtivnika();
		//initPowerUp();
		kreiraniProtivnici = false;
	}
	
	public void initProtivnika () throws SlickException {
		Image [] eksp = {new Image("res/bum.png"), new Image("res/bum2.png")};
		protivnik[0] = new Boss1(tenkIgrac, tenkIgrac2, this);
		for (int i=0; i<protivnik.length; i++) {
			//System.out.println(i);
			//System.out.println("Broj protivnika "+protivnik.length);
			protivnik[i].setAnimation();
			protivnik[i].setEksplozija(new Animation(eksp, duration2, true));
			protivnik[i].setMeci(new ArrayList<Metak>());
		}
		kreiraniProtivnici = true;
	}
	
	public void postaviProtivnike () {
		if(mod == game_mode.MOD1) {
			protivnik[0].setProtivnikX(400);
			protivnik[0].setProtivnikY(100);
			for (int i=0; i<protivnik.length; i++) {
				protivnik[i].setImaDvaIgraca(dvaIgraca);
				protivnik[i].postaviTezinu();
			}
		}
	}
	
	public void initPowerUp() throws SlickException {}
	
	public void resetProlaz () {
		eksplozija.setLooping(true);
		prolaz.setLooping(true);
		eksplozija.restart();
		prolaz.restart();
		try {
			world = new Image("res/level1_4_anim.png");
		} catch (SlickException e) {}
		if (!pocniNivo) {
			kolizija.izbaciPoslednjeg();
		}
	    pocniNivo = true;
	}
	
	public void dodajObjekte() {
		//zidovi
		kolizija.dodajPravougaonik(0, 0, 459, 50);
		kolizija.dodajPravougaonik(564, 0, 460, 50);
		
		kolizija.dodajPravougaonik(0, 0, 50, 768);
		kolizija.dodajPravougaonik(0, 718, 460, 50);
		kolizija.dodajPravougaonik(564, 718, 460, 50);
		kolizija.dodajPravougaonik(974, 0  , 50, 768);
		
		kolizija.dodajPravougaonik(205,545, 200, 50);
		kolizija.dodajPravougaonik(620,545, 200, 50);
		
	}

	public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
		g.drawImage(world, 0, 0);
		
		if(!pocniNivo) {
			if(mod == game_mode.MOD1) {
				for (int i=0; i<protivnik.length; i++) {
					if (protivnik[i].isUbiven() == true) {
						protivnik[i].eksplodiraj();
					}
				}
			}
			if(mod == game_mode.MOD2) {
				for (int i=0; i<protivnikT.length; i++) {
					if (protivnikT[i].isUbiven() == true) {
						protivnikT[i].eksplodiraj();
					}
				}
			}
		}
		
		if (krajNivoa()) prolaz.draw(460, 0);
		if (krajNivoa() && otvoriProlaz==true) {
			rupa.draw(460, 0);
			eksplozija.draw(485, 25);
			eksplozija.setLooping(false);
			prolaz.setLooping(false);
		}
		if (tenkIgrac.isZiv()) {
			tenkIgrac.crtaj(g);
		}
		else
			tenkIgrac.eksplodiraj();
		if (dvaIgraca) {
			if (tenkIgrac2.isZiv()) {
				tenkIgrac2.crtaj(g);
			}
			else
				tenkIgrac2.eksplodiraj();
		}
		
		if (shot) {
			for (Iterator<Metak> i = tenkIgrac.getMetak().iterator(); i.hasNext();) {
				Metak m = i.next();
				m.crtaj(g);
			}
			for (Iterator<Metak> i = tenkIgrac.getRakete().iterator(); i.hasNext();) { //crtanje raketa(sekundarnog oruzja)
				Metak r = i.next();
				r.crtaj(g);
			}
		}
		if (shot2) {
			for (Iterator<Metak> i = tenkIgrac2.getMetak().iterator(); i.hasNext();) { //crtanje metkova
				Metak m = i.next();
				m.crtaj(g);
			}
			for (Iterator<Metak> i = tenkIgrac2.getRakete().iterator(); i.hasNext();) { //crtanje raketa(sekundarnog oruzja)
				Metak r = i.next();
				r.crtaj(g);
			}
		}
		if(mod == game_mode.MOD1) {
			for (int i=0; i<protivnik.length; i++) {
				if (protivnik[i].isUbiven() == false && !pocniNivo) protivnik[i].crtaj(g);
				for (Iterator<Metak> j = protivnik[i].getMeci().iterator(); j.hasNext();) {
					Metak m = j.next();
					m.crtaj(g);
				}
			}
		}
		if (quit == true) {
			crtajPauzu(g);
		}
	}
	
	public void kretanje (int delta) throws SlickException {
		if (mod == game_mode.MOD1)
			for (int i=0; i<protivnik.length; i++) {
				if (protivnik[i].isUbiven() == false && (tenkIgrac.isZiv() || tenkIgrac2.isZiv())) {
					protivnik[i].protivnikAI(delta, kolizija, false);
					if (((Boss1)protivnik[i]).getMetakSredina() == 100) {
						zvuk.boss();
					}
				}
				for (Iterator<Metak> j = protivnik[i].getMeci().iterator(); j.hasNext();) { // kretanje metka protivnika
					Metak m = j.next();
					m.pomerajMetka(delta);
					if (m.getMetakX()>tenkIgrac.getTenkX() 
							&& m.getMetakX()<(tenkIgrac.getTenkX() + 50) 
							&& m.getMetakY()>tenkIgrac.getTenkY() 
							&& m.getMetakY()<(tenkIgrac.getTenkY() + 50)) {
						if(tenkIgrac.getTenk_HP() >= 0 && tenkIgrac.isShield_flag() == false){
							tenkIgrac.setTenk_HP(tenkIgrac.getTenk_HP() - 1);
							if(tenkIgrac.isZvezda() == true) {
								tenkIgrac.setZvezda(false);
								tenkIgrac.setAnimation();
							}
							zvuk.eksplodiraj();
							j.remove();
						}
						else if(tenkIgrac.isShield_flag() == true){
							tenkIgrac.setShield_flag(false);
							zvuk.eksplodiraj();
							j.remove();
						}
					}
					if (dvaIgraca && tenkIgrac2.isZiv() && m.getMetakX()>tenkIgrac2.getTenkX() 
							&& m.getMetakX()<(tenkIgrac2.getTenkX() + 50) 
							&& m.getMetakY()>tenkIgrac2.getTenkY() 
							&& m.getMetakY()<(tenkIgrac2.getTenkY() + 50)) {
						if(tenkIgrac2.getTenk_HP() >= 0 && tenkIgrac2.isShield_flag() == false){
							tenkIgrac2.setTenk_HP(tenkIgrac2.getTenk_HP() - 1);
							if(tenkIgrac2.isZvezda() == true) {
								tenkIgrac2.setZvezda(false);
								tenkIgrac2.setAnimation();
							}
							zvuk.eksplodiraj();
							j.remove();
						}
						else if(tenkIgrac2.isShield_flag() == true){
							tenkIgrac2.setShield_flag(false);
							zvuk.eksplodiraj();
							j.remove();
						}
					}
					if(tenkIgrac.getTenk_HP() <= 0) {
						tenkIgrac.setZiv(false);
					}
					if(dvaIgraca && tenkIgrac2.getTenk_HP() <= 0) {
						tenkIgrac2.setZiv(false);
					}
					if (pogodioKutiju(m)) j.remove();
					else if (m.getMetakY()<50 || m.getMetakY()>768 
							|| m.getMetakX()<0 || m.getMetakX()>1024)
						j.remove();
				}
			}
		if (mod == game_mode.MOD2)
		for (int i=0; i<protivnikT.length; i++) {
			protivnikT[i].setDelta(delta);
			for (Iterator<Metak> j = protivnikT[i].getMeci().iterator(); j.hasNext();) { // kretanje metka protivnika
				Metak m = j.next();
				m.pomerajMetka(delta);
				if (m.getMetakX()>tenkIgrac.getTenkX() 
						&& m.getMetakX()<(tenkIgrac.getTenkX() + 50) 
						&& m.getMetakY()>tenkIgrac.getTenkY() 
						&& m.getMetakY()<(tenkIgrac.getTenkY() + 50)) {
					if(tenkIgrac.getTenk_HP() >= 0 && tenkIgrac.isShield_flag() == false){
						tenkIgrac.setTenk_HP(tenkIgrac.getTenk_HP() - 1);
						if(tenkIgrac.isZvezda() == true) {
							tenkIgrac.setZvezda(false);
							tenkIgrac.setAnimation();
						}
						zvuk.eksplodiraj();
						j.remove();
					}
					else if(tenkIgrac.isShield_flag() == true){
						tenkIgrac.setShield_flag(false);
						zvuk.eksplodiraj();
						j.remove();
					}
				}
				if(tenkIgrac.getTenk_HP() <= 0) tenkIgrac.setZiv(false);
				if (pogodioKutiju(m)) j.remove();
				if (m.getMetakY()<50 || m.getMetakY()>768
						|| m.getMetakX()<0 || m.getMetakX()>1024)
					j.remove();
			}
		}	
	}
	
	public  boolean pogodioKutiju (Metak m) {
		return (!mozeFull(kolizija.getObjekatList(), m.getMetakX(), m.getMetakY(), 0, 0));
	}
	
	public  boolean pogodioNestoRaketa (Metak r) {
		for(int i=0; i<kolizija.getObjekatList().size(); i++) {
			Objekat tempOb = kolizija.getObjekatList().get(i);
			if(tempOb.getObl() == oblik.KVADRAT) {
				if ((r.getSmer()==0 || r.getSmer()==1)
						 && (r.getMetakX() + 6.5 <= tempOb.getxOb()+tempOb.getSize()
			    		 && r.getMetakX() + 6.5 >= tempOb.getxOb()
			    		 && r.getMetakY() + 15 <= tempOb.getyOb()+tempOb.getSize()
			    		 && r.getMetakY() + 15 >= tempOb.getyOb()))
					return true;
				else if ((r.getSmer()==2 || r.getSmer()==3)
						 && (r.getMetakX() + 15 <= tempOb.getxOb()+tempOb.getSize()
			    		 && r.getMetakX() + 15 >= tempOb.getxOb()
			    		 && r.getMetakY() + 6.5 <= tempOb.getyOb()+tempOb.getSize()
			    		 && r.getMetakY() + 6.5 >= tempOb.getyOb()))
					return true;
			}
			if(tempOb.getObl() == oblik.PRAVOUGAONIK) {
				Pravougaonik p = (Pravougaonik) tempOb;
	   			if ((r.getSmer()==0 || r.getSmer()==1)
	   					 && (r.getMetakX() + 6.5 <= p.getxOb()+p.getxSize()
		        		 && r.getMetakX() + 6.5 >= p.getxOb()
		        		 && r.getMetakY() + 15 <= p.getyOb()+p.getySize()
		        		 && r.getMetakY() + 15 >= p.getyOb()))
	   				return true;
	   			if ((r.getSmer()==2 || r.getSmer()==3)
	   					 && (r.getMetakX() + 15 <= p.getxOb()+p.getxSize()
		        		 && r.getMetakX() + 15 >= p.getxOb()
		        		 && r.getMetakY() + 6.5 <= p.getyOb()+p.getySize()
		        		 && r.getMetakY() + 6.5 >= p.getyOb()))
	   				return true;
			}
		}
		return false;
	}
	
	public void kretanjeMetka (int delta) {
		for (Iterator<Metak> i = tenkIgrac.getMetak().iterator(); i.hasNext();) {
			Metak m = i.next();
			m.pomerajMetka(delta);
			if(mod == game_mode.MOD1 && !pocniNivo) {
				for (int j=0; j<protivnik.length; j++) {
					if (protivnik[j].isUbiven() == false 
							&& m.getMetakX() > protivnik[j].getProtivnikX() 
							&& m.getMetakX() < (protivnik[j].getProtivnikX() + 400) 
							&& m.getMetakY() > protivnik[j].getProtivnikY() 
							&& m.getMetakY() < (protivnik[j].getProtivnikY() + 200)) {
						//if(tenkIgrac.isRaketa()) protivnik[j].setHP(protivnik[j].getHP() - 2);
						protivnik[j].setHP(protivnik[j].getHP() - 1);
						if(protivnik[j].getVrsta() == tip_protivnika.BOSS) {
							Boss1 b = (Boss1) protivnik[j];
							b.startBlink();
						}
						if(protivnik[j].getHP() == 0) {
							protivnik[j].setUbiven(true);
							if(protivnik[j].getVrsta() == tip_protivnika.BOSS) 
								tenkIgrac.setBodovi(bodovi[6]);
						}
						zvuk.eksplodiraj();
						i.remove();
					}
				}
			}
			if(mod == game_mode.MOD2 && !pocniNivo) {
				for (int j=0; j<protivnikT.length; j++) {
					if (protivnikT[j].isUbiven() == false 
							&& m.getMetakX() > protivnikT[j].getProtivnikX() 
							&& m.getMetakX() < (protivnikT[j].getProtivnikX() + 400) 
							&& m.getMetakY() > protivnikT[j].getProtivnikY() 
							&& m.getMetakY() < (protivnikT[j].getProtivnikY() + 200)) {
						protivnikT[j].setHP(protivnikT[j].getHP() - 1);
						zvuk.eksplodiraj();
						i.remove();
					}
					if(protivnikT[j].getHP() == 0) protivnikT[j].setUbiven(true);
				}
			}
			if (pogodioKutiju(m)) i.remove();
			else if (krajNivoa() && m.getMetakX()>=460 && m.getMetakX()<560 && m.getMetakY()<50) {
				if (!otvoriProlaz) {
					otvoriProlaz = true;
					tenkIgrac.setBodovi(bodovi[7]);
					zvuk.eksplodiraj();
					i.remove();
				}
				else if ( m.getMetakY()<0 ) i.remove();
			}
			else if (m.getMetakY()<50 || m.getMetakY()>768 || m.getMetakX()<0 || m.getMetakX()>1024) i.remove();
		}
	}
	
	public void kretanjeMetkaDva (int delta) {
		for (Iterator<Metak> i = tenkIgrac2.getMetak().iterator(); i.hasNext();) {
			Metak m = i.next();
			m.pomerajMetka(delta);
			if(mod == game_mode.MOD1 && !pocniNivo) {
				for (int j=0; j<protivnik.length; j++) {
					if (protivnik[j].isUbiven() == false 
							&& m.getMetakX() > protivnik[j].getProtivnikX() 
							&& m.getMetakX() < (protivnik[j].getProtivnikX() + 400) 
							&& m.getMetakY() > protivnik[j].getProtivnikY() 
							&& m.getMetakY() < (protivnik[j].getProtivnikY() + 200)) {
						//if(tenkIgrac.isRaketa()) protivnik[j].setHP(protivnik[j].getHP() - 2);
						protivnik[j].setHP(protivnik[j].getHP() - 1);
						if(protivnik[j].getVrsta() == tip_protivnika.BOSS) {
							Boss1 b = (Boss1) protivnik[j];
							b.startBlink();
						}
						if(protivnik[j].getHP() == 0) {
							protivnik[j].setUbiven(true);
							if(protivnik[j].getVrsta() == tip_protivnika.BOSS) 
								tenkIgrac2.setBodovi(bodovi[6]);
						}
						zvuk.eksplodiraj();
						i.remove();
					}
				}
			}
			if(mod == game_mode.MOD2 && !pocniNivo) {
				for (int j=0; j<protivnikT.length; j++) {
					if (protivnikT[j].isUbiven() == false 
							&& m.getMetakX() > protivnikT[j].getProtivnikX() 
							&& m.getMetakX() < (protivnikT[j].getProtivnikX() + 400) 
							&& m.getMetakY() > protivnikT[j].getProtivnikY() 
							&& m.getMetakY() < (protivnikT[j].getProtivnikY() + 200)) {
						protivnikT[j].setHP(protivnikT[j].getHP() - 1);
						zvuk.eksplodiraj();
						i.remove();
					}
					if(protivnikT[j].getHP() == 0) protivnikT[j].setUbiven(true);
				}
			}
			if (pogodioKutiju(m)) i.remove();
			else if (krajNivoa() && m.getMetakX()>=460 && m.getMetakX()<560 && m.getMetakY()<50) {
				if (!otvoriProlaz) {
					otvoriProlaz = true;
					tenkIgrac.setBodovi(bodovi[7]);
					zvuk.eksplodiraj();
					i.remove();
				}
				else if ( m.getMetakY()<0 ) i.remove();
			}
			else if (m.getMetakY()<50 || m.getMetakY()>768 || m.getMetakX()<0 || m.getMetakX()>1024) i.remove();
		}
	}
	
	public void kretanjeRakete (int delta) { //kretanje sekundarnog oruzja samog igraca
		for (Iterator<Metak> i = tenkIgrac.getRakete().iterator(); i.hasNext();) {
			Metak r = i.next();
			r.pomerajMetka(delta);
			if(mod == game_mode.MOD1 && !pocniNivo) {
				for (int j=0; j<protivnik.length; j++) {
					if (protivnik[j].isUbiven() == false) {
						if ((r.getSmer()==0 || r.getSmer()==1)
								&& r.getMetakX() + 6.5 > protivnik[j].getProtivnikX() 
								&& r.getMetakX() + 6.5 < (protivnik[j].getProtivnikX() + 400) 
								&& r.getMetakY() + 15 > protivnik[j].getProtivnikY() 
								&& r.getMetakY() + 15 < (protivnik[j].getProtivnikY() + 200)) {
							protivnik[j].setHP(protivnik[j].getHP() - 5);
							if(protivnik[j].getVrsta() == tip_protivnika.BOSS) {
								Boss1 b = (Boss1) protivnik[j];
								b.startBlink();
							}
							if(protivnik[j].getHP() <= 0) {
								protivnik[j].setUbiven(true);
								if(protivnik[j].getVrsta() == tip_protivnika.BOSS) 
									tenkIgrac.setBodovi(bodovi[6]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
						else if ((r.getSmer()==2 || r.getSmer()==3)
								&& r.getMetakX() + 15 > protivnik[j].getProtivnikX() 
								&& r.getMetakX() + 15 < (protivnik[j].getProtivnikX() + 400) 
								&& r.getMetakY() + 6.5 > protivnik[j].getProtivnikY() 
								&& r.getMetakY() + 6.5 < (protivnik[j].getProtivnikY() + 200)) {
							protivnik[j].setHP(protivnik[j].getHP() - 5);
							if(protivnik[j].getVrsta() == tip_protivnika.BOSS) {
								Boss1 b = (Boss1) protivnik[j];
								b.startBlink();
							}
							if(protivnik[j].getHP() <= 0) {
								protivnik[j].setUbiven(true);
								if(protivnik[j].getVrsta() == tip_protivnika.BOSS) 
									tenkIgrac.setBodovi(bodovi[6]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
					}
				}
			}
			if(mod == game_mode.MOD2 && !pocniNivo) {
				for (int j=0; j<protivnikT.length; j++) {
					if (protivnikT[j].isUbiven() == false 
							&& r.getMetakX() > protivnikT[j].getProtivnikX() 
							&& r.getMetakX() < (protivnikT[j].getProtivnikX() + 400) 
							&& r.getMetakY() > protivnikT[j].getProtivnikY() 
							&& r.getMetakY() < (protivnikT[j].getProtivnikY() + 200)) {
						protivnikT[j].setHP(protivnikT[j].getHP() - 5);
						zvuk.eksplodiraj();
						i.remove();
					}
					if(protivnikT[j].getHP() <= 0) protivnikT[j].setUbiven(true);
				}
			}
			if (pogodioNestoRaketa(r)) i.remove();
			else if (krajNivoa() && r.getMetakX()>=456 && r.getMetakX()<556 && r.getMetakY()<50) {
				if (!otvoriProlaz) {
					otvoriProlaz = true;
					tenkIgrac.setBodovi(bodovi[7]);
					zvuk.eksplodiraj();
					i.remove();
				}
				else if ( r.getMetakY()<0 ) i.remove();
			}
			else if (r.getMetakY()<50 || r.getMetakY()>768 || r.getMetakX()<0 || r.getMetakX()>1024) i.remove();
		}
	}
	
	public void kretanjeRaketeDva (int delta) { //kretanje sekundarnog oruzja drugog igraca
		for (Iterator<Metak> i = tenkIgrac2.getRakete().iterator(); i.hasNext();) {
			Metak r = i.next();
			r.pomerajMetka(delta);
			if(mod == game_mode.MOD1 && !pocniNivo) {
				for (int j=0; j<protivnik.length; j++) {
					if (protivnik[j].isUbiven() == false) {
						if ((r.getSmer()==0 || r.getSmer()==1)
								&& r.getMetakX() + 6.5 > protivnik[j].getProtivnikX() 
								&& r.getMetakX() + 6.5 < (protivnik[j].getProtivnikX() + 400) 
								&& r.getMetakY() + 15 > protivnik[j].getProtivnikY() 
								&& r.getMetakY() + 15 < (protivnik[j].getProtivnikY() + 200)) {
							protivnik[j].setHP(protivnik[j].getHP() - 5);
							if(protivnik[j].getVrsta() == tip_protivnika.BOSS) {
								Boss1 b = (Boss1) protivnik[j];
								b.startBlink();
							}
							if(protivnik[j].getHP() <= 0) {
								protivnik[j].setUbiven(true);
								if(protivnik[j].getVrsta() == tip_protivnika.BOSS) 
									tenkIgrac2.setBodovi(bodovi[6]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
						else if ((r.getSmer()==2 || r.getSmer()==3)
								&& r.getMetakX() + 15 > protivnik[j].getProtivnikX() 
								&& r.getMetakX() + 15 < (protivnik[j].getProtivnikX() + 400) 
								&& r.getMetakY() + 6.5 > protivnik[j].getProtivnikY() 
								&& r.getMetakY() + 6.5 < (protivnik[j].getProtivnikY() + 200)) {
							protivnik[j].setHP(protivnik[j].getHP() - 5);
							if(protivnik[j].getVrsta() == tip_protivnika.BOSS) {
								Boss1 b = (Boss1) protivnik[j];
								b.startBlink();
							}
							if(protivnik[j].getHP() <= 0) {
								protivnik[j].setUbiven(true);
								if(protivnik[j].getVrsta() == tip_protivnika.BOSS) 
									tenkIgrac2.setBodovi(bodovi[6]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
					}
				}
			}
			if(mod == game_mode.MOD2 && !pocniNivo) {
				for (int j=0; j<protivnikT.length; j++) {
					if (protivnikT[j].isUbiven() == false 
							&& r.getMetakX() > protivnikT[j].getProtivnikX() 
							&& r.getMetakX() < (protivnikT[j].getProtivnikX() + 400) 
							&& r.getMetakY() > protivnikT[j].getProtivnikY() 
							&& r.getMetakY() < (protivnikT[j].getProtivnikY() + 200)) {
						protivnikT[j].setHP(protivnikT[j].getHP() - 5);
						zvuk.eksplodiraj();
						i.remove();
					}
					if(protivnikT[j].getHP() <= 0) protivnikT[j].setUbiven(true);
				}
			}
			if (pogodioNestoRaketa(r)) i.remove();
			else if (krajNivoa() && r.getMetakX()>=456 && r.getMetakX()<556 && r.getMetakY()<50) {
				if (!otvoriProlaz) {
					otvoriProlaz = true;
					tenkIgrac.setBodovi(bodovi[7]);
					zvuk.eksplodiraj();
					i.remove();
				}
				else if ( r.getMetakY()<0 ) i.remove();
			}
			else if (r.getMetakY()<50 || r.getMetakY()>768 || r.getMetakX()<0 || r.getMetakX()>1024) i.remove();
		}
	}

	public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
		Input input = gc.getInput();
		Nivo.setNivo(9);
		if (!zvuk.dohvTekucu().playing()) {
			zvuk.pustiMuziku();
		}
		if (!dvaIgraca) {
			if (tenkIgrac.isZiv() == false) {
				Nivo.setVerticalLevel(false);
				tenkIgrac.ozivi();
				oziviSve();
				sbg.enterState(4);
			}
		}
		else {
			if (tenkIgrac.isZiv() == false && tenkIgrac2.isZiv() == false) {
				Nivo.setVerticalLevel(false);
				tenkIgrac.ozivi();
				tenkIgrac2.ozivi();
				oziviSve();
				sbg.enterState(4);
			}
		}
		fullScreenOnOff(gc);
		if (quit==false) {
			kretanje(constDelta);
			//pokupi();
			
			if (!dvaIgraca) {
				if(pocniNivo && tenkIgrac.getTenkY()<668) {
					world = new Image("res/level1_4.png");
					kolizija.dodajPravougaonik(450, 718, 150, 50);
				    pocniNivo = false;
				}
			}
			else {
				if(pocniNivo && tenkIgrac.getTenkY()<668 && tenkIgrac2.getTenkY()<668) {
					world = new Image("res/level1_4.png");
					kolizija.dodajPravougaonik(450, 718, 150, 50);
				    pocniNivo = false;
				}
			}
			
			if (shot) {
				kretanjeMetka(constDelta);
				kretanjeRakete(constDelta);
			}
			if (shot2) {
				kretanjeMetkaDva(constDelta);
				kretanjeRaketeDva(constDelta);
			}
			
			tenkIgrac.odbrojavaj();
			tenkIgrac2.odbrojavaj();

			//================prvi igrac
			//shot
			if(input.isKeyPressed(Input.KEY_SPACE)) {
				zvuk.pucaj();
				shot = true;
				tenkIgrac.pucaj(false);
			}
			//secundary shot
			if(input.isKeyPressed(Input.KEY_LCONTROL) && tenkIgrac.isZiv()==true) {
				if (tenkIgrac.isRaketa()) {
					shot = true;
					tenkIgrac.pucajRaketu();
				}
			}
			//up
			if(input.isKeyDown(Input.KEY_UP) && tenkIgrac.isZiv()==true) {
				moveUp(constDelta, 50);
				if (tenkIgrac.getTenkY()<0) {
					if (tenkIgrac2.isPresao()) {
						tenkIgrac.noviLevel(dvaIgraca);
						tenkIgrac2.noviLevel();
						sbg.enterState(10);
					}
					else {
						tenkIgrac.setPresao(true);
					}
					if (!dvaIgraca || tenkIgrac2.isZiv() == false) {
						tenkIgrac.noviLevel(dvaIgraca);
						sbg.enterState(10);
					}
				}
			}
			//down
			else if(input.isKeyDown(Input.KEY_DOWN) && tenkIgrac.isZiv()==true) {
				moveDown(constDelta, 718);
				if (tenkIgrac.getTenkY()>0) {
					tenkIgrac.setPresao(false);
				}
			}
			//left
			else if(input.isKeyDown(Input.KEY_LEFT) && tenkIgrac.isZiv()==true && tenkIgrac.getTenkY()>=-50) {
				moveLeft(constDelta, 0);
			}
			//right
			else if(input.isKeyDown(Input.KEY_RIGHT) && tenkIgrac.isZiv()==true && tenkIgrac.getTenkY()>=-50) {
				moveRight(constDelta, 974);
			}
			else {
				tenkIgrac.setAutoUpdate(false);
			}
			//============drugi igrac
			if (dvaIgraca) {
				//shot
				if(input.isControlPressed(6, input.getControllerCount()-1) && tenkIgrac2.isZiv()==true) {
					zvuk.pucaj();
					shot2 = true;
					tenkIgrac2.pucaj(false);
				}
				//secundary shot
				if(input.isControlPressed(5, input.getControllerCount()-1) && tenkIgrac2.isZiv()==true) {
					if (tenkIgrac2.isRaketa()) {
						shot2 = true;
						tenkIgrac2.pucajRaketu();
					}
				}
				//up
				if(input.isControllerUp(Input.ANY_CONTROLLER) && tenkIgrac2.isZiv()==true) {
					moveUpDva(constDelta, 50);
					if (tenkIgrac2.getTenkY()<0) {
						if (tenkIgrac.isPresao()) {
							tenkIgrac.noviLevel(dvaIgraca);
							tenkIgrac2.noviLevel();
							sbg.enterState(10);
						}
						else {
							tenkIgrac2.setPresao(true);
						}
						if (tenkIgrac.isZiv() == false) {
							tenkIgrac2.noviLevel();
							sbg.enterState(10);
						}
					}
				}
				//down
				else if(input.isControllerDown(Input.ANY_CONTROLLER) && tenkIgrac2.isZiv()==true) {
					moveDownDva(constDelta, 718);
					if (tenkIgrac2.getTenkY()>0) {
						tenkIgrac2.setPresao(false);
					}
				}
				//left
				else if(input.isControllerLeft(Input.ANY_CONTROLLER) && tenkIgrac2.isZiv()==true && tenkIgrac2.getTenkY()>=-50) {
					moveLeftDva(constDelta, 0);
				}
				//right
				else if(input.isControllerRight(Input.ANY_CONTROLLER) && tenkIgrac2.isZiv()==true && tenkIgrac2.getTenkY()>=-50) {
					moveRightDva(constDelta, 974);
				}
				else {
					tenkIgrac2.setAutoUpdate(false);
				}
				
				if (input.isControlPressed(13, input.getControllerCount()-1)) {
					quit = true;
				}
			}
			
			//escape
			if (input.isKeyDown(Input.KEY_ESCAPE)) {
				quit = true;
			}
		}
		//when escape i clicked
		if (quit == true) {
			if (input.isKeyDown(Input.KEY_R)) {
				quit = false;
			}
			if (input.isKeyDown(Input.KEY_M)) {
				mainMenu(sbg);
			}
			if (input.isKeyDown(Input.KEY_Q)) {
				gc.exit();
			}
		}
	}

}
